package com.peng.leetcode.other;

import java.math.BigDecimal;

/**
 * CheckStraightLine
 * <p>
 * 1232. 缀点成线
 * <p>
 * 在一个 XY 坐标系中有一些点，我们用数组 coordinates 来分别记录它们的坐标，其中 coordinates[i] = [x, y] 表示横坐标为 x、纵坐标为 y 的点。
 * <p>
 * 请你来判断，这些点是否在该坐标系中属于同一条直线上，是则返回 true，否则请返回 false。
 * <p>
 * 链接：https://leetcode-cn.com/problems/check-if-it-is-a-straight-line
 *
 * @author: lupeng6
 * @create: 2021/1/19 10:39
 */
public class CheckStraightLine {

    public static void main(String[] args) {
        int[][] coordinates = {{0, 1}, {2, 4}, {3, 3}};
        System.out.println(new CheckStraightLine().checkStraightLine(coordinates));
    }

    public boolean checkStraightLine(int[][] coordinates) {
        int[] first = coordinates[0];
        int[] second = coordinates[1];

        int[] prev = second;

        int x = first[0] - second[0];
        int y = first[1] - second[1];

        if (x == 0) {
            for (int i = 2; i < coordinates.length; i++) {
                if (coordinates[i][0] - first[0] != 0) {
                    return false;
                }
            }
        } else if (y == 0) {
            for (int i = 2; i < coordinates.length; i++) {
                if (coordinates[i][1] - first[1] != 0) {
                    return false;
                }
            }
        } else {
            Double xy = BigDecimal.valueOf(x).divide(BigDecimal.valueOf(y), 10, BigDecimal.ROUND_HALF_UP).doubleValue();

            for (int i = 2; i < coordinates.length; i++) {
                int[] curr = coordinates[i];
                Double currXy = BigDecimal.valueOf(prev[0] - curr[0]).divide(BigDecimal.valueOf(prev[1] - curr[1]), 10, BigDecimal.ROUND_HALF_UP).doubleValue();
                if (xy.compareTo(currXy) != 0) {
                    return false;
                }
                prev = curr;
            }
        }
        return true;
    }
}
